#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
用户账户相关功能：注册、短信、登录、注销
"""
import uuid
import datetime
from django.shortcuts import render,HttpResponse,redirect
from django.http import JsonResponse
from web.forms.account import RegisterModelForm,SendSmsForm,LoginSmsForm,LoginForm,ProjectForm
from web import models
from django.db.models import Q

def logout(request):
    request.session.flush()
    return redirect('index')

def register(request):
    if request.method == 'GET':
        form = RegisterModelForm()
        return render(request,'register.html', {'form':form})
    form = RegisterModelForm(request.POST)
    if form.is_valid():
        # 验证通过 写入数据库(密码是密文)
        # 用户表中新建一条数据
        instance = form.save()
        # 创建交易记录
        policy_object = models.PricePolicy.objects.filter(classification=1, title="个人免费版").first()
        models.Trading.objects.create(
            state=2,
            user=instance,
            price=policy_object,
            actual_payment=0,
            start=datetime.datetime.now(),
            count=0,
            order=str(uuid.uuid4()),
        )
        return JsonResponse({'status':True,'data':'/login/'})
    return JsonResponse({'status':False,'error':form.errors})

def send_sms(request):
    '''发送短信'''
    form = SendSmsForm(request,data=request.GET)
    # 只是验证手机号：不能为空、格式是否正确
    if form.is_valid():
        return JsonResponse({'status':True})
    return JsonResponse({'status':False,'error':form.errors})

def login_sms(request):
    # 短信验证
    if request.method == 'GET':
        form = LoginSmsForm()
        return render(request,'login_sms.html',{'form':form})
    form = LoginSmsForm(request.POST)
    if form.is_valid():
        # 用户输入正确，登录成功
        mobile_phone = form.cleaned_data['mobile_phone']
        # 把名字·写入到session中
        user_object = models.UserInfo.objects.filter(mobile_phone=mobile_phone).first()
        request.session['user_id'] = user_object.id
        request.session['user_name'] = user_object.username
        return JsonResponse({'status':True,'data':'/index/'})
    return JsonResponse({'status':False,'error':form.errors})

def login(request):
    if request.method == 'GET':
        form = LoginForm(request)
        return render(request,'login.html',{'form':form})
    form = LoginForm(request,data=request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']

        # user_object = models.UserInfo.objects.filter(username=username,password=password).first()
        # 手机号或邮箱 == 用户名  and  密码==密码
        user_object = models.UserInfo.objects.filter(Q(email=username)|Q(mobile_phone=username)).filter(password=password).first()
        if user_object:
            # 用户名密码正确
            request.session['user_id'] = user_object.id
            request.session.set_expiry(60 * 60 * 24 * 14)
            return redirect('index')
        form.add_error('username','用户名或密码错误')
    return render(request,'login.html',{'form':form})

def image_code(request):
    # 生成图片验证码
    from io import BytesIO
    from utils.image_code import check_code
    image_object,code = check_code()
    request.session['image_code'] = code
    request.session.set_expiry(60)   # 主动修改过期时间为60秒
    stream = BytesIO()
    image_object.save(stream, 'png')
    return HttpResponse(stream.getvalue())

